Сюрпризы в коде на Си

Характерной особенностью языка Си является возможность сделать что-либо несколькими различными способами, при этом все они будут эквивалентны. Например, если x является обычной переменной типа int, то каждое из следующих выражений будет выполнять одно и тоже действие:

x = x + 1; x += 1; x++; ++x;

В каждом случае переменная х будет увеличена на единицу. Единственно возможное различие в представленных выражениях связано с тем, что не очень хороший компилятор может сгенерировать немного лучший код для последних двух выражений (вообще это наводит на мысль о том, что пора бы воспользоваться компилятором получше).

Две формы оператора ++, использованные в этом примере, дают один и тот же результат. Тем не менее, если используется значение этого выражения, то результаты операций префиксного и постфиксного инкремента будут различны:

y = x++; // переменной y присваивается значение x, до его инкремента y = ++x; // переменной y присваивается значение х, после его инкремента

Интересно,

Читать далее